//
//  WWHomeViewModel.swift
//  SinWEiBo
//
//  Created by 胡良志 on 2018/3/29.
//  Copyright © 2018年 HuLiangZhi. All rights reserved.
//  1. 将控制器的网络请求的方法封装到 视图模型中
//  2. 将数据处理成模型数据

import UIKit
import SDWebImage
import YYCache

class WWHomeViewModel: NSObject {

    //数据
    lazy var dataArray : [WWStatusViewModel]  = [WWStatusViewModel]()
    
    
    //MARK: 请求数据 isPullup:是否在上拉刷新
    open func loadData (isPullup:Bool , fisished:@escaping (Bool,Int) -> ()){
        
        var maxId : NSInteger = 0
        var sinceId : NSInteger = 0
        if isPullup {
            //上拉
            maxId = dataArray.last?.status?.id ?? 0
            //去除重复的数据
            if maxId != 0{
                maxId -= 1
            }
        }else{
            sinceId = dataArray.first?.status?.id ?? 0
        }
//        //参数
//        let urlString = "https://api.weibo.com/2/statuses/home_timeline.json"
//        let paramenters = ["access_token":WWUserAccountViewModel.shared.userAccount?.access_token,
//                           "max_id" : "\(maxId)",
//                           "since_id" : "\(sinceId)"]
//
//        WWNetworkTools.shared.request(method: .GET, urlString: urlString, parameters: paramenters) { (responseObjceve, error) in
//            if (error != nil) {
//                fisished(false,0)
//                return
//
//            }
//            //          转换成字典类型
//            let dict = responseObjceve as! [String : Any]
//            //取出需要的数据并尝试转换成字典类型的数组
//            guard let array = dict["statuses"] as? [[String : Any]] else { return }
        
        WWStatusDAL.loadHomeData(sinceId: Int64(sinceId), maxId: Int64(maxId)) { (array) in
            
            var tempArray = [WWStatusViewModel]()
            
            for itme in array!{
                let viewModel = WWStatusViewModel()
                let s = WWStatus()
                //调用对象的YYModel种扩充的对象方法传入字典 --> 模型数据
                s.yy_modelSet(with: itme)
                //给viewmodel的status赋值
                viewModel.status = s
                tempArray.append(viewModel)
            }
            //为数据赋值
            //如果是上拉加载更多数据就应该执行追加的操作
            if isPullup{
                //上拉加载更多数据 追加
                self.dataArray = self.dataArray + tempArray
            }else{
                //初次的时候直接赋值 或者 下拉刷新的时候 执行插入到前面操作
                self.dataArray = tempArray + self.dataArray
            }

            //缓存单张图片
            self.cecheStatusSingleImage(array: tempArray, fisished: fisished)
            fisished(true,tempArray.count)
        }
            //查询数据库的结果集
//            let res = WWStatusDAL.checkoutStatus(sinceId: Int64(sinceId), maxId: Int64(maxId))
            //缓存到数据库
//            WWStatusDAL.cacheStatus(array: array)
        

    }
    //缓存单张图片,在回调.在外面计算图片大小尺寸
    private func cecheStatusSingleImage (array:[WWStatusViewModel],fisished:@escaping (Bool,Int) -> ()){
        if array.count == 0 {
            fisished(true,0)
            return
        }
        //因下载图片是异步的,需要把所有单张图片下载完成之后再回调,因此用调度组
        let group = DispatchGroup()
        
        for viewModel in array {
            if viewModel.imageURLs?.count == 1 {
                //入组
                group.enter()
                let url = URL(string: viewModel.imageURLs?.last?.wap360 ?? "")
//               SDWebImageManager.shared()
                SDWebImageManager.shared().imageDownloader?.downloadImage(with: url, options: [], progress: nil, completed: { (_, _, _, _) in
                    print("--单张图片下载")
                    
                    group.leave()
                })

            }
        }
        group.notify(queue: DispatchQueue.main) {
            print("--所有图片下载完成")
            fisished(true,array.count)
        }
    }
    
}










